# coding:utf-8
from ctypes import *

import numpy as np
import numpy.ctypeslib as npct

lib = cdll.LoadLibrary("./libdot.so")  # 注意是相对于执行python命令时的路径

'''申明dot函数的传入参数类型:ndpointer为numpy.ctypeslib扩展库中提供的函数，可将numpy数组转为指针形式被C函数识别, 其中ndim表示数组维数。
'''
lib.dot.argtypes = [
    npct.ndpointer(dtype=np.float32, ndim=1),
    npct.ndpointer(dtype=np.float32, ndim=1),
    npct.ndpointer(dtype=np.float32, ndim=1),
    c_int
]


def dot(arr, brr):
    crr = np.zeros(shape=arr.shape, dtype=np.float32)
    lib.dot(arr, brr, crr, len(arr))
    return crr


arr = np.array([1, 4, 8], dtype=np.float32)
brr = np.array([3, 5, 1], dtype=np.float32)
print (dot(arr, brr))  # [ 3. 20.  8.]
